# 【一】开源和协作的框架
# ● 其最初是为了页面抓取 (更确切来说, 网络抓取 )所设计的，
# ● 使用它可以以快速、简单、可扩展的方式从网站中提取所需的数据。
# ● 但目前Scrapy的用途十分广泛，可用于如数据挖掘、监测和自动化测试等领域，也可以应用在获取API所返回的数据(例如 Amazon Associates Web Services ) 或者通用的网络爬虫。
# ● Scrapy 是基于 twisted 框架开发而来，twisted是一个流行的事件驱动的python网络框架。
# ● 因此 Scrapy 使用了一种非阻塞（又名异步）的代码来实现并发。
# ● Scrapy框架类似于Django框架

# Django框架式大而全 类似于航空母舰
# scrapy框架大而全
# 一旦创建项目就会随之创建很多文件 体积比较大 内置的功能比较全面

# 【二】各部分组成的功能
# 【1】引擎(EGINE)
# ● 引擎负责控制系统所有组件之间的数据流，并在某些动作发生时触发事件。
# 【2】调度器(SCHEDULER)
# ● 用来接受引擎发过来的请求, 压入队列中, 并在引擎再次请求的时候返回.
# ● 可以想像成一个URL的优先级队列, 由它来决定下一个要抓取的网址是什么, 同时去除重复的网址
# 【3】下载器(DOWLOADER)
# ● 用于下载网页内容, 并将网页内容返回给EGINE，下载器是建立在twisted这个高效的异步模型上的
# 【4】爬虫(SPIDERS)
# ● SPIDERS是开发人员自定义的类，用来解析responses，并且提取items，或者发送新的请求
# 【5】项目管道(ITEM PIPLINES)
# ● 在items被提取后负责处理它们，主要包括清理、验证、持久化（比如存到数据库）等操作
# ● 下载器中间件(Downloader Middlewares)位于Scrapy引擎和下载器之间，主要用来处理从EGINE传到DOWLOADER的请求request，已经从DOWNLOADER传到EGINE的响应response，
# 【6】爬虫中间件(Spider Middlewares)
# ● 位于EGINE和SPIDERS之间，主要工作是处理SPIDERS的输入（即responses）和输出（即requests）

# 【三】官网链接
# ● https://docs.scrapy.org/en/latest/topics/architecture.htm
